##Goals of this file
1.Load the fastree unrooted tree. 2.Add tree to phyloseq object. 3.Visualize and inspect tree with ggtree. 4.Prune ASVs, if needed. 5.Root our tree. 6.Combine new tree with a phyloseq object. 7.Save 2 phyloseq objects: 1. Unrooted tree phyloseq object 2. Rooted tree phyloseq object.
##Set the seed
set.seed(2443)
##Load Packages
pacman::p_load(tidyverse, phyloseq, ggtree, phytools,
install = FALSE)
##Load data files
# Preprocessed phyloseq object
load("data/02_PreProcessing/raw_preprocessed_physeq.RData")
raw_preprocessed_physeq
## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 2969 taxa and 109 samples ]
## sample_data() Sample Data: [ 109 samples by 18 sample variables ]
## tax_table() Taxonomy Table: [ 2969 taxa by 9 taxonomic ranks ]
##Make different physeq objects for DNA and RNA samples
raw_preprocessed_physeq_DNA <- subset_samples(raw_preprocessed_physeq,nuc_acid_type == "DNA")
raw_preprocessed_physeq_RNA <- subset_samples(raw_preprocessed_physeq,nuc_acid_type == "RNA")
# Load in the tree!
unrooted_tree <- read.tree("data/03_Phylogenetic_Tree/ASVs_unrooted.tree")
unrooted_tree
##
## Phylogenetic tree with 2969 tips and 2967 internal nodes.
##
## Tip labels:
## ASV_1553, ASV_2305, ASV_1749, ASV_1964, ASV_1880, ASV_1409, ...
## Node labels:
## , 0.920, 0.795, 0.990, 0.955, 0.761, ...
##
## Unrooted; includes branch lengths.
str(unrooted_tree)
## List of 5
## $ edge : int [1:5935, 1:2] 2970 2971 2972 2973 2974 2975 2975 2974 2976 2977 ...
## $ edge.length: num [1:5935] 0.03971 0.01402 0.06219 0.03807 0.00586 ...
## $ Nnode : int 2967
## $ node.label : chr [1:2967] "" "0.920" "0.795" "0.990" ...
## $ tip.label : chr [1:2969] "ASV_1553" "ASV_2305" "ASV_1749" "ASV_1964" ...
## - attr(*, "class")= chr "phylo"
## - attr(*, "order")= chr "cladewise"
##Merge Phyloseq with tree
# Intuition check
stopifnot(ntaxa(raw_preprocessed_physeq) == ntaxa(unrooted_tree))
# Merge the tree with the phyloseq object
unrooted_physeq <- merge_phyloseq(raw_preprocessed_physeq, unrooted_tree)
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
unrooted_physeq_DNA <- merge_phyloseq(raw_preprocessed_physeq_DNA,unrooted_tree)
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
unrooted_physeq_RNA <- merge_phyloseq(raw_preprocessed_physeq_RNA,unrooted_tree)
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
unrooted_physeq
## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 2969 taxa and 109 samples ]
## sample_data() Sample Data: [ 109 samples by 18 sample variables ]
## tax_table() Taxonomy Table: [ 2969 taxa by 9 taxonomic ranks ]
## phy_tree() Phylogenetic Tree: [ 2969 tips and 2967 internal nodes ]
unrooted_physeq_DNA
## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 2969 taxa and 56 samples ]
## sample_data() Sample Data: [ 56 samples by 18 sample variables ]
## tax_table() Taxonomy Table: [ 2969 taxa by 9 taxonomic ranks ]
## phy_tree() Phylogenetic Tree: [ 2969 tips and 2967 internal nodes ]
unrooted_physeq_RNA
## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 2969 taxa and 53 samples ]
## sample_data() Sample Data: [ 53 samples by 18 sample variables ]
## tax_table() Taxonomy Table: [ 2969 taxa by 9 taxonomic ranks ]
## phy_tree() Phylogenetic Tree: [ 2969 tips and 2967 internal nodes ]
##Plot tree with ggtree
# Make a basic tree
kingdom_tree <-
ggtree(unrooted_physeq) +
# color tips by kingdom
geom_tippoint(mapping = aes(color = Kingdom)) +
scale_color_manual(values = c("goldenrod1", "cornflowerblue", "grey")) +
# Add title
labs(title = "Unrooted Tree") +
#move the legend to the bottom
theme(legend.position = "bottom"); kingdom_tree
kingdom_tree_DNA <-
ggtree(unrooted_physeq_DNA) +
# color tips by kingdom
geom_tippoint(mapping = aes(color = Kingdom)) +
scale_color_manual(values = c("goldenrod1", "cornflowerblue", "grey")) +
# Add title
labs(title = "Unrooted Tree DNA Samples") +
#move the legend to the bottom
theme(legend.position = "bottom"); kingdom_tree
kingdom_tree_RNA <-
ggtree(unrooted_physeq_RNA) +
# color tips by kingdom
geom_tippoint(mapping = aes(color = Kingdom)) +
scale_color_manual(values = c("goldenrod1", "cornflowerblue", "grey")) +
# Add title
labs(title = "Unrooted Tree RNA Samples") +
#move the legend to the bottom
theme(legend.position = "bottom"); kingdom_tree
kingdom_tree
kingdom_tree_DNA
kingdom_tree_RNA
kingdom_node_tree <-
kingdom_tree +
# Add the node label
geom_text(aes(label=node), hjust= -0.5, vjust = -0.3, size = 2)
kingdom_node_tree_DNA <-
kingdom_tree_DNA +
# Add the node label
geom_text(aes(label=node), hjust= -0.5, vjust = -0.3, size = 2)
kingdom_node_tree_RNA <-
kingdom_tree_RNA +
# Add the node label
geom_text(aes(label=node), hjust= -0.5, vjust = -0.3, size = 2)
kingdom_node_tree
kingdom_node_tree_DNA
kingdom_node_tree_RNA
# View a specific clade
# Zoom in on origin tree: Node 1721
viewClade(kingdom_node_tree +
labs(title = "Unrooted Tree: Node 1721"),
node = 1721)
# View a specific clade
# Zoom in on origin tree: Node 1743
viewClade(kingdom_node_tree +
labs(title = "Unrooted Tree: Node 1743"),
node = 1743)
viewClade(kingdom_node_tree +
labs(title = "Unrooted Tree: Node 4605") +
geom_text(aes(label=ASV)),
node = 4605)
## Warning: Removed 2987 rows containing missing values or values outside the scale range
## (`geom_text()`).
otu_table_spurious <- otu_table(unrooted_physeq)
asv_1167_abundance <- otu_table_spurious["ASV_1167",]
asv_375_abundance <- otu_table_spurious["ASV_375",]
barplot(asv_1167_abundance, main = "Abdundance of asv 1167 across samples",xlab="samples",ylab="abundance",col="blue")
barplot(asv_375_abundance, main = "Abdundance of asv 375 across samples",xlab="samples",ylab="abundance",col="blue")
We looked at both ASV 375 and 1167 because of the length of the node, but after blasting the sequence, it appears they just originate from the 16S gene of uncharacterized bacteria so we will not be removing these sequences. Moreover, we looked at the abundace of these ASVs and they seemed abundant enough not to exclude.
##Midroot Tree
new_unrooted_tree <- phy_tree(unrooted_physeq)
new_unrooted_tree_DNA <- phy_tree(unrooted_physeq_DNA)
new_unrooted_tree_RNA <- phy_tree(unrooted_physeq_RNA)
is.rooted(new_unrooted_tree)
## [1] FALSE
is.rooted(new_unrooted_tree_DNA)
## [1] FALSE
is.rooted(new_unrooted_tree_RNA)
## [1] FALSE
# Let's midpoint root the tree
midpoint_rooted_tree <- midpoint.root(new_unrooted_tree)
midpoint_rooted_tree_DNA <- midpoint.root(new_unrooted_tree_DNA)
midpoint_rooted_tree_RNA <- midpoint.root(new_unrooted_tree_RNA)
# Is the new tree rooted?
is.rooted(midpoint_rooted_tree)
## [1] TRUE
is.rooted(midpoint_rooted_tree_DNA)
## [1] TRUE
is.rooted(midpoint_rooted_tree_RNA)
## [1] TRUE
# Merge tree with the physeq
midroot_physeq <- merge_phyloseq(raw_preprocessed_physeq, midpoint_rooted_tree)
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
midroot_physeq_DNA <- merge_phyloseq(raw_preprocessed_physeq_DNA, midpoint_rooted_tree_DNA)
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
midroot_physeq_RNA <- merge_phyloseq(raw_preprocessed_physeq_RNA, midpoint_rooted_tree_RNA)
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
## Found more than one class "phylo" in cache; using the first, from namespace 'phyloseq'
## Also defined by 'tidytree'
midroot_physeq
## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 2969 taxa and 109 samples ]
## sample_data() Sample Data: [ 109 samples by 18 sample variables ]
## tax_table() Taxonomy Table: [ 2969 taxa by 9 taxonomic ranks ]
## phy_tree() Phylogenetic Tree: [ 2969 tips and 2968 internal nodes ]
# Quick inspection of tree
ggtree(midroot_physeq) +
geom_tippoint(mapping = aes(color = Kingdom)) + geom_text(aes(label=node), hjust= -0.5, vjust = -0.3, size = 2)
##Save to a new phyloseq object
# Save both phyloseq objects with our tree object to one .RData file
save(list = c("unrooted_physeq", "midroot_physeq","unrooted_physeq_DNA","midroot_physeq_DNA","unrooted_physeq_RNA","midroot_physeq_RNA"),
file = "data/03_Phylogenetic_Tree/phytree_preprocessed_physeq.RData")
##Session Info
# Ensure reproducibility
devtools::session_info()
## ─ Session info ───────────────────────────────────────────────────────────────
## setting value
## version R version 4.3.2 (2023-10-31)
## os Rocky Linux 9.0 (Blue Onyx)
## system x86_64, linux-gnu
## ui X11
## language (EN)
## collate en_US.UTF-8
## ctype en_US.UTF-8
## tz America/New_York
## date 2024-04-28
## pandoc 3.1.1 @ /usr/lib/rstudio-server/bin/quarto/bin/tools/ (via rmarkdown)
##
## ─ Packages ───────────────────────────────────────────────────────────────────
## package * version date (UTC) lib source
## ade4 1.7-22 2023-02-06 [1] CRAN (R 4.3.2)
## ape * 5.7-1 2023-03-13 [2] CRAN (R 4.3.2)
## aplot 0.2.2 2023-10-06 [1] CRAN (R 4.3.2)
## Biobase 2.62.0 2023-10-24 [2] Bioconductor
## BiocGenerics 0.48.1 2023-11-01 [2] Bioconductor
## biomformat 1.30.0 2023-10-24 [1] Bioconductor
## Biostrings 2.70.1 2023-10-25 [2] Bioconductor
## bitops 1.0-7 2021-04-24 [2] CRAN (R 4.3.2)
## bslib 0.5.1 2023-08-11 [2] CRAN (R 4.3.2)
## cachem 1.0.8 2023-05-01 [2] CRAN (R 4.3.2)
## callr 3.7.3 2022-11-02 [2] CRAN (R 4.3.2)
## cli 3.6.1 2023-03-23 [2] CRAN (R 4.3.2)
## cluster 2.1.4 2022-08-22 [2] CRAN (R 4.3.2)
## clusterGeneration 1.3.8 2023-08-16 [1] CRAN (R 4.3.2)
## coda 0.19-4 2020-09-30 [2] CRAN (R 4.3.2)
## codetools 0.2-19 2023-02-01 [2] CRAN (R 4.3.2)
## colorspace 2.1-0 2023-01-23 [2] CRAN (R 4.3.2)
## combinat 0.0-8 2012-10-29 [1] CRAN (R 4.3.2)
## crayon 1.5.2 2022-09-29 [2] CRAN (R 4.3.2)
## data.table 1.14.8 2023-02-17 [2] CRAN (R 4.3.2)
## devtools 2.4.4 2022-07-20 [2] CRAN (R 4.2.1)
## digest 0.6.33 2023-07-07 [2] CRAN (R 4.3.2)
## doParallel 1.0.17 2022-02-07 [2] CRAN (R 4.3.2)
## dplyr * 1.1.3 2023-09-03 [2] CRAN (R 4.3.2)
## ellipsis 0.3.2 2021-04-29 [2] CRAN (R 4.3.2)
## evaluate 0.23 2023-11-01 [2] CRAN (R 4.3.2)
## expm 0.999-9 2024-01-11 [1] CRAN (R 4.3.2)
## fansi 1.0.5 2023-10-08 [2] CRAN (R 4.3.2)
## farver 2.1.1 2022-07-06 [2] CRAN (R 4.3.2)
## fastmap 1.1.1 2023-02-24 [2] CRAN (R 4.3.2)
## fastmatch 1.1-4 2023-08-18 [1] CRAN (R 4.3.2)
## forcats * 1.0.0 2023-01-29 [1] CRAN (R 4.3.2)
## foreach 1.5.2 2022-02-02 [2] CRAN (R 4.3.2)
## fs 1.6.3 2023-07-20 [2] CRAN (R 4.3.2)
## generics 0.1.3 2022-07-05 [2] CRAN (R 4.3.2)
## GenomeInfoDb 1.38.0 2023-10-24 [2] Bioconductor
## GenomeInfoDbData 1.2.11 2023-11-07 [2] Bioconductor
## ggfun 0.1.4 2024-01-19 [1] CRAN (R 4.3.2)
## ggplot2 * 3.5.0 2024-02-23 [2] CRAN (R 4.3.2)
## ggplotify 0.1.2 2023-08-09 [1] CRAN (R 4.3.2)
## ggtree * 3.10.1 2024-02-25 [1] Bioconductor 3.18 (R 4.3.2)
## glue 1.6.2 2022-02-24 [2] CRAN (R 4.3.2)
## gridGraphics 0.5-1 2020-12-13 [1] CRAN (R 4.3.2)
## gtable 0.3.4 2023-08-21 [2] CRAN (R 4.3.2)
## highr 0.10 2022-12-22 [2] CRAN (R 4.3.2)
## hms 1.1.3 2023-03-21 [1] CRAN (R 4.3.2)
## htmltools 0.5.7 2023-11-03 [2] CRAN (R 4.3.2)
## htmlwidgets 1.6.2 2023-03-17 [2] CRAN (R 4.3.2)
## httpuv 1.6.12 2023-10-23 [2] CRAN (R 4.3.2)
## igraph 1.5.1 2023-08-10 [2] CRAN (R 4.3.2)
## IRanges 2.36.0 2023-10-24 [2] Bioconductor
## iterators 1.0.14 2022-02-05 [2] CRAN (R 4.3.2)
## jquerylib 0.1.4 2021-04-26 [2] CRAN (R 4.3.2)
## jsonlite 1.8.7 2023-06-29 [2] CRAN (R 4.3.2)
## knitr 1.45 2023-10-30 [2] CRAN (R 4.3.2)
## labeling 0.4.3 2023-08-29 [2] CRAN (R 4.3.2)
## later 1.3.1 2023-05-02 [2] CRAN (R 4.3.2)
## lattice 0.21-9 2023-10-01 [2] CRAN (R 4.3.2)
## lazyeval 0.2.2 2019-03-15 [2] CRAN (R 4.3.2)
## lifecycle 1.0.3 2022-10-07 [2] CRAN (R 4.3.2)
## lubridate * 1.9.3 2023-09-27 [1] CRAN (R 4.3.2)
## magrittr 2.0.3 2022-03-30 [2] CRAN (R 4.3.2)
## maps * 3.4.2 2023-12-15 [1] CRAN (R 4.3.2)
## MASS 7.3-60 2023-05-04 [2] CRAN (R 4.3.2)
## Matrix 1.6-1.1 2023-09-18 [2] CRAN (R 4.3.2)
## memoise 2.0.1 2021-11-26 [2] CRAN (R 4.3.2)
## mgcv 1.9-0 2023-07-11 [2] CRAN (R 4.3.2)
## mime 0.12 2021-09-28 [2] CRAN (R 4.3.2)
## miniUI 0.1.1.1 2018-05-18 [2] CRAN (R 4.3.2)
## mnormt 2.1.1 2022-09-26 [1] CRAN (R 4.3.2)
## multtest 2.58.0 2023-10-24 [1] Bioconductor
## munsell 0.5.0 2018-06-12 [2] CRAN (R 4.3.2)
## nlme 3.1-163 2023-08-09 [2] CRAN (R 4.3.2)
## numDeriv 2016.8-1.1 2019-06-06 [1] CRAN (R 4.3.2)
## optimParallel 1.0-2 2021-02-11 [1] CRAN (R 4.3.2)
## pacman 0.5.1 2019-03-11 [1] CRAN (R 4.3.2)
## patchwork 1.1.3 2023-08-14 [2] CRAN (R 4.3.2)
## permute 0.9-7 2022-01-27 [1] CRAN (R 4.3.2)
## phangorn 2.11.1 2023-01-23 [1] CRAN (R 4.3.2)
## phyloseq * 1.46.0 2023-10-24 [1] Bioconductor
## phytools * 2.1-1 2024-01-09 [1] CRAN (R 4.3.2)
## pillar 1.9.0 2023-03-22 [2] CRAN (R 4.3.2)
## pkgbuild 1.4.2 2023-06-26 [2] CRAN (R 4.3.2)
## pkgconfig 2.0.3 2019-09-22 [2] CRAN (R 4.3.2)
## pkgload 1.3.3 2023-09-22 [2] CRAN (R 4.3.2)
## plyr 1.8.9 2023-10-02 [2] CRAN (R 4.3.2)
## prettyunits 1.2.0 2023-09-24 [2] CRAN (R 4.3.2)
## processx 3.8.2 2023-06-30 [2] CRAN (R 4.3.2)
## profvis 0.3.8 2023-05-02 [2] CRAN (R 4.3.2)
## promises 1.2.1 2023-08-10 [2] CRAN (R 4.3.2)
## ps 1.7.5 2023-04-18 [2] CRAN (R 4.3.2)
## purrr * 1.0.2 2023-08-10 [2] CRAN (R 4.3.2)
## quadprog 1.5-8 2019-11-20 [1] CRAN (R 4.3.2)
## R6 2.5.1 2021-08-19 [2] CRAN (R 4.3.2)
## Rcpp 1.0.11 2023-07-06 [2] CRAN (R 4.3.2)
## RCurl 1.98-1.13 2023-11-02 [2] CRAN (R 4.3.2)
## readr * 2.1.5 2024-01-10 [1] CRAN (R 4.3.2)
## remotes 2.4.2.1 2023-07-18 [2] CRAN (R 4.3.2)
## reshape2 1.4.4 2020-04-09 [2] CRAN (R 4.3.2)
## rhdf5 2.46.1 2023-11-29 [1] Bioconductor 3.18 (R 4.3.2)
## rhdf5filters 1.14.1 2023-11-06 [1] Bioconductor
## Rhdf5lib 1.24.2 2024-02-07 [1] Bioconductor 3.18 (R 4.3.2)
## rlang 1.1.2 2023-11-04 [2] CRAN (R 4.3.2)
## rmarkdown 2.25 2023-09-18 [2] CRAN (R 4.3.2)
## rstudioapi 0.15.0 2023-07-07 [2] CRAN (R 4.3.2)
## S4Vectors 0.40.1 2023-10-26 [2] Bioconductor
## sass 0.4.7 2023-07-15 [2] CRAN (R 4.3.2)
## scales 1.3.0 2023-11-28 [2] CRAN (R 4.3.2)
## scatterplot3d 0.3-44 2023-05-05 [1] CRAN (R 4.3.2)
## sessioninfo 1.2.2 2021-12-06 [2] CRAN (R 4.3.2)
## shiny 1.7.5.1 2023-10-14 [2] CRAN (R 4.3.2)
## stringi 1.7.12 2023-01-11 [2] CRAN (R 4.3.2)
## stringr * 1.5.0 2022-12-02 [2] CRAN (R 4.3.2)
## survival 3.5-7 2023-08-14 [2] CRAN (R 4.3.2)
## tibble * 3.2.1 2023-03-20 [2] CRAN (R 4.3.2)
## tidyr * 1.3.0 2023-01-24 [2] CRAN (R 4.3.2)
## tidyselect 1.2.0 2022-10-10 [2] CRAN (R 4.3.2)
## tidytree 0.4.6 2023-12-12 [1] CRAN (R 4.3.2)
## tidyverse * 2.0.0 2023-02-22 [1] CRAN (R 4.3.2)
## timechange 0.3.0 2024-01-18 [1] CRAN (R 4.3.2)
## treeio 1.26.0 2023-10-24 [1] Bioconductor
## tzdb 0.4.0 2023-05-12 [1] CRAN (R 4.3.2)
## urlchecker 1.0.1 2021-11-30 [2] CRAN (R 4.3.2)
## usethis 2.2.2 2023-07-06 [2] CRAN (R 4.3.2)
## utf8 1.2.4 2023-10-22 [2] CRAN (R 4.3.2)
## vctrs 0.6.4 2023-10-12 [2] CRAN (R 4.3.2)
## vegan 2.6-4 2022-10-11 [1] CRAN (R 4.3.2)
## withr 2.5.2 2023-10-30 [2] CRAN (R 4.3.2)
## xfun 0.41 2023-11-01 [2] CRAN (R 4.3.2)
## xtable 1.8-4 2019-04-21 [2] CRAN (R 4.3.2)
## XVector 0.42.0 2023-10-24 [2] Bioconductor
## yaml 2.3.7 2023-01-23 [2] CRAN (R 4.3.2)
## yulab.utils 0.1.4 2024-01-28 [1] CRAN (R 4.3.2)
## zlibbioc 1.48.0 2023-10-24 [2] Bioconductor
##
## [1] /home/dt473/R/x86_64-pc-linux-gnu-library/4.3
## [2] /programs/R-4.3.2/library
##
## ──────────────────────────────────────────────────────────────────────────────